package com.jk.garden1.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jk.garden1.dao.NoteDao;
import com.jk.garden1.dao.SubscribeDao;
import com.jk.garden1.entity.SubscribeEntity;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

@Component
public class TimerTask {
    @Autowired
    private NoteDao noteDao;
    @Autowired
    private SubscribeDao subscribeDao;
    @Autowired
    private AmqpTemplate amqpTemplate;
    /**
     * 自动发送预约时间小于3小时发送电话短信
     */
    //每个整点执行一次
    @Scheduled(cron = "0 0 0/1 * * ?")
    public List<SubscribeEntity>getList(){
        //当前时间
        Calendar calendar = Calendar.getInstance();
        //当前时间-3小时
        calendar.add(Calendar.HOUR_OF_DAY,-3);
        System.out.println(calendar.getTime());
        QueryWrapper<SubscribeEntity> queryWrapper = new QueryWrapper<>();
        //小于当前时间
        queryWrapper.lt("subscribetime",new Date());
        //大于当前时间-1小时
        queryWrapper.gt("subscribetime",calendar.getTime());
        //查询全部
        List<SubscribeEntity> subscribeEntities = subscribeDao.selectList(queryWrapper);
        //转成实体类
        for(int i=0; i<subscribeEntities.size(); i++){
            System.out.println(subscribeEntities.get(i));
            SubscribeEntity subscribeEntity = subscribeEntities.get(i);
            ObjectMapper objectMapper = new ObjectMapper();
            String msg = null;
            try {
                msg = objectMapper.writeValueAsString(subscribeEntity);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            amqpTemplate.convertAndSend("sendMsgNote2",msg);
        }
        return null;
    }
    //        秒   分   时   日  月   年
    //cron = "0 19 16 16 3 *"
    //每天凌晨执行一次
    @Scheduled(cron = "0 0 0 * * ?")
    public void task(){
        noteDao.delete(null);
    }
//    每天凌晨2点  0 0 2 * * ?和每天隔一小时 0 * */1 * * ?
//
//    例1：每隔5秒执行一次：*/5 * * * * ?
//
//    例2：每隔5分执行一次：0 */5 * * * ?
//
//    在26分、29分、33分执行一次：0 26,29,33 * * * ?
//
//    例3：每天半夜12点30分执行一次：0 30 0 * * ? （注意日期域为0不是24）
//
//    每天凌晨1点执行一次：0 0 1 * * ?
//
//    每天上午10：15执行一次： 0 15 10 ? * * 或 0 15 10 * * ? 或 0 15 10 * * ? *
//
//    每天中午十二点执行一次：0 0 12 * * ?
//
//    每天14点到14：59分，每1分钟执行一次：0 * 14 * * ?
//
//    每天14点到14：05分，每1分钟执行一次：0 0-5 14 * * ?
//
//    每天14点到14：55分，每5分钟执行一次：0 0/5 14 * * ?
//
//    每天14点到14：55分，和18点到18点55分，每5分钟执行一次：0 0/5 14,18 * * ?
//
//    每天18点执行一次：0 0 18 * * ?
//
//    每天18点、22点执行一次：0 0 18,22 * * ?
//
//    每天7点到23点，每整点执行一次：0 0 7-23 * * ?
//
//    每个整点执行一次：0 0 0/1 * * ?
}
